package hos.map.distance;

import java.util.List;

import hos.map.coordinate.LatLng;
import hos.map.coordinate.LatLngBounds;
import hos.map.coordinate.LatLngCollection;

/**
 * <p>Title: DistanceCalculator </p>
 * <p>Description: 距离计算接口 </p>
 * <p>Company: www.mapuni.com </p>
 *
 * @author : 蔡俊峰
 * @version : 1.0
 * @date : 2023-12-10 23:57
 */
public interface DistanceCalculatorInterface {
    /**
     * 计算2点位之间的距离
     *
     * @param target 第二个点位
     * @return 距离
     */
    BearingDistanceCache distance(final LatLng target);

    /**
     * 对目标点位进行偏移
     *
     * @param distanceInMeter 偏移的距离
     * @param bearing         偏移的角度
     * @return 偏移后的点位
     */
    LatLng offset(final double distanceInMeter, final double bearing);

    /**
     * 判断点位是否在集合形成的面内部
     *
     * @param point 目标点位
     * @return true 在多边形的内部
     */
    boolean isPolygonContains(List<LatLng> point);

    /**
     * 判断经纬度是否在圆内
     *
     * @param latLng 目标经纬度
     * @param radius 半径
     */
    boolean isCircleRepeated(LatLng latLng, int radius);

    /**
     * 计算2点位之间的距离
     *
     * @param target 第二个点位
     * @param unit   单位
     * @return 距离
     */
    BearingDistanceCache distance(LengthUnit unit, LatLng target);

    /**
     * 计算2个点位之间的角度
     *
     * @param target 目标点位
     */
    double bearing(LatLng target);


    LatLng getCenter(LatLng latLng);

    LatLng getCenter(LatLngBounds latLng);

    LatLng getCenter(LatLngCollection collection);
}
